Gestore file .amn

Carica un file .amn e premi il tasto Decode. In alternativa, riempi l'header e le due parti degli immobili e premi Encode per creare un file .amn.

Mostra base64 (per debug)

            

Ma quindi come è fatto un file .amn?

Un file .amn è un file testuale diviso in parti a cui vengono applicati 3 passaggi:

  1. Viene preposto un header statico che inizia con zz. Per ogni immobile, viene generata una linea che inizia con it e una linea che inizia con cc (In output ci sono prima tutte le linee 'it' e poi tutte le linee 'cc').
  2. Ogni linea (senza header) viene codificata con base64 standard.
  3. Ogni carattere viene sostituito con una sequenza di due caratteri (viene applicato un dizionario di cifratura).

Per la decodifica i passaggi vengono effettuati al contrario.
Non mi sono occupato molto delle strutture dati una volta decodificate:

Come hai risolto la sfida?

Molto guessing, poca programmazione. :(

  1. Ho notato che il Riferimento Immobile era fondamentale in quanto potevo scegliere l'input e averne l'output cifrato: Chosen Plaintext Attack.
  2. Ho capito che si trattava di un cifrario con base64 grazie a vari indizi:
    • La differenza di byte fra messaggi con input di lunghezza diversa suggeriva una codifica a coppie di caratteri, con espansione doppia (2.66x) rispetto al base64 (1.33x);
    • Cambiando una lettera, si modificavano fino a 8 caratteri nell'output;
    • Sequenze di 'a' producevano pattern ripetuti;
    • Le linee finiscono spesso per ii o iiii, come il padding = del base64.
  3. Ho cercato una stringa che producesse una sequenza unica in base64, per mappare le coppie di caratteri cifrati. Per esempio ×]u×]×]u× produce INdddddd11111w== come output. Cercando quindi questa sequenza unica nel file, è stato possibile capire dove iniziava il mio input, e quindi poi effettuare il mapping fra ciphertext e plaintext, inserendo ad esempio lettere non conosciute in mezzo alle due parti ripetitive. Da notare che ci sono state alcune discrepanze a causa dell'allineamento; Bisogna aggiungere un carattere qualunque all'inizio della propria stringa prima di encodarla in base64!
  4. Ho creato una pagina HTML per visualizzare dinamicamente il mapping e, ripetendo il processo, ho completato il dizionario delle coppie. Infine, ho chiesto a GPT5 di creare questa pagina, per poi ritoccarla manualmente.